#include<bits/stdc++.h>
#define ll long long
#define ri register int
using namespace std;
const int MAXN=1e5+10;
int n,q,d[MAXN],c[MAXN],r,v,b[MAXN],nxt[MAXN][20],sum[MAXN][20];
stack <int> stk;

void find_max(){
	for(ri i=1;i<=n;i++){
		while(stk.empty()==0&&d[i]>d[stk.top()]){
			nxt[stk.top()][0]=i;
			sum[stk.top()][0]=c[i];
			stk.pop();
		}
		stk.push(i);
	}
	while(stk.empty()==0){
		nxt[stk.top()][0]=0;
		stk.pop();
	}
}

void pre_rmq(){
	for(ri j=1;(1<<j)<=n;j++){
		for(ri i=1;i+(1<<j)<=n;i++){
			nxt[i][j]=nxt[nxt[i][j-1]][j-1];
			sum[i][j]=sum[i][j-1]+sum[nxt[i][j-1]][j-1];
		}
	}
}

int query(int r,int val){
	if(c[r]>=val){
		return r;
	}
	val-=c[r];
	for(ri i=18;i>=0;i--){
		if(nxt[r][i]!=0&&val>sum[r][i]){
			val-=sum[r][i];
			r=nxt[r][i];
		}
	}
	return nxt[r][0];
}

int main() {
	scanf("%d%d",&n,&q);
	for(ri i=1;i<=n;i++)scanf("%d%d",&d[i],&c[i]);
	memset(sum,0x3f,sizeof(sum));
	find_max();
	pre_rmq();
	for(ri i=1;i<=q;i++){
		scanf("%d%d",&r,&v);
		printf("%d\n",query(r,v));
	}
	return 0;
}

